iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Python

在AWS上進行物聯網與人工智慧實作系列 第 13

D13-使用 MicroPython 拍照-ESP32-CAM

  • 分享至 

  • xImage
  •  

使用 MicroPython 拍照

目錄

攝影機硬體規格

根據 ESP32-CAM 的規格書上所說,它支持 OV2640 和 OV7670 攝像頭,而我們所下載的韌體版本只支援 OV2640,在操作軟體之前必需先理解一下硬體規格,這樣才可以有效的發揮它的硬體效能。
OV2640 硬體規格:

  • 像素:200萬像素(UXGA 1622X1200)
  • 供電電壓:3.3V
  • IO電壓:1.7V ~ 3.3V DC
  • 輸出格式:
    YUV(422/420)/YCnCr422
    RGB565/555
    8-bit compressed data
  • 圖片輸出速度:
    UXGA/SXGA 15fps
    UXGA/SXGA 30fps
    SVGA 30fps
    CIF 60FPS
  • 高靈敏度適合低照度應用
  • 低電壓適合嵌入式應用
  • 標準的SCCB接口,兼容I2C接口
  • 自動影響控制功能包括:自動曝光控制、自動增益控制、自動白平衡,自動消除燈光條紋、自動黑電平校準
  • 圖像質量控制包括色飽和度、色相、伽瑪、銳度ANTI_BLOOM
  • 支持圖像縮放
  • 鏡頭失光補償
  • 飽和度自動調節
  • 邊緣增強自動調節
  • 降噪自動調節

camera 軟體定義

以下所寫的語法都僅支持 esp32-cam-micropython-2022 所提供的韌體,如果更換韌體,語法將完全不同。
使用以下語法列出所有相關方法與屬性

import camera
for item in dir(camera):
    print(item)

輸出結果為:

__class__
__name__
__dict__
aecvalue
aelevels
agcgain
brightness
capture
capture_bmp
capture_jpg
conf
contrast
deinit
flip
framesize
init
mirror
pixformat
quality
saturation
speffect
whitebalance

camera.init()
初始化攝像頭
camera.deinit()
關閉攝像頭

camera.framesize()
OV2640 模組所支援的解析度包含下列這些,輸入數字即可,如 camera.framesize(10) 表示設定為 800x600 像素

FRAME_96X96 - 96x96 像素

  1. FRAME_96X96 - 96x96 像素
  2. FRAME_QQVGA - 160x120 像素 (QQVGA代表Quarter Quarter VGA)
  3. FRAME_QCIF - 176x144 像素 (QCIF代表Quarter CIF)
  4. FRAME_HQVGA - 240x160 像素 (HQVGA代表Half Quarter VGA)
  5. FRAME_240X240 - 240x240 像素
  6. FRAME_QVGA - 320x240 像素 (QVGA代表Quarter VGA)
  7. FRAME_CIF - 352x288 像素 (CIF代表Common Intermediate Format)
  8. FRAME_HVGA - 480x320 像素 (HVGA代表Half VGA)
  9. FRAME_VGA - 640x480 像素 (VGA代表Video Graphics Array)
  10. FRAME_SVGA - 800x600 像素 (SVGA代表Super VGA)
  11. FRAME_XGA - 1024x768 像素 (XGA代表Extended Graphics Array)
  12. FRAME_HD - 1280x720 像素 (HD代表High Definition)
  13. FRAME_SXGA - 1280x1024 像素 (SXGA代表Super XGA)
  14. FRAME_UXGA - 1600x1200 像素 (UXGA代表Ultra XGA)

camera.capture()
拍攝照片並保存

camera.brightness()
設置攝像頭亮度,值為 -2,2 (default 0)

camera.whitebalance()
設置攝像頭白平衡,如 camera.whitebalance(1)

  • WB_NONE -- 0
  • WB_SUNNY -- 1
  • WB_CLOUDY -- 2
  • WB_OFFICE -- 3
  • WB_HOME -- 4

camera.saturation()
設置攝像頭飽和度,值為 -2,2 (default 0)

camera.speffect()
設置攝像頭濾鏡

  • EFFECT_NONE -- 0
  • EFFECT_NEG -- 1
  • EFFECT_BW -- 2
  • EFFECT_RED -- 3
  • EFFECT_GREEN -- 4
  • EFFECT_BLUE -- 5
  • EFFECT_RETRO -- 6

camera.mirror()
設置攝像頭鏡像效果,值為 0,1

camera.flip()
設置攝像頭旋轉,值為 0,1

camera.quality()
攝像質量,值為 10-63 數字越低意味著質量越高

以下程式會利用 esp32-cam 拍攝一張照片,請檔名為當前時間。

import camera
import io
import time
res = camera.init()
if res:
    camera.framesize(10)     
    camera.contrast(2)       
    camera.speffect(2)
    time.sleep(2)
    img=camera.capture()
    (year, month, day, hour, minute, second, weekday, yearday) = time.gmtime(time.time())
    image_name = f'{year}{month}{day}_{hour}{minute}{second}_image.jpg'
    f = open(image_name, 'wb')
    f.write(img)
    f.close()
    camera.deinit()
else:
    print('camera is not ready, reset ESP32-CAM')

https://ithelp.ithome.com.tw/upload/images/20240820/20129510DizgsjmWV5.png
圖 1. 程式執行結果,會在esp32-cam儲存一個圖片

https://ithelp.ithome.com.tw/upload/images/20240820/20129510rCRgSXeUEw.png
圖 2. 將圖片下載到本機觀看

https://ithelp.ithome.com.tw/upload/images/20240820/20129510Ge64qK8uie.png
圖 3. 依照上面的設定解析度為 800x600

參考資料


上一篇
D12-使用 MicroPython 安裝新模組與使用
下一篇
D14-網際網路模型
系列文
在AWS上進行物聯網與人工智慧實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言